#!/bin/bash

# Staging环境停止脚本
# 用于停止本地staging环境的所有服务

echo "🛑 停止CU MR BULL Staging环境..."

# 函数：停止进程
stop_process() {
    local pid_file=$1
    local service_name=$2
    
    if [ -f "$pid_file" ]; then
        local pid=$(cat "$pid_file")
        if ps -p $pid > /dev/null 2>&1; then
            echo "🔄 停止 $service_name (PID: $pid)..."
            kill $pid
            
            # 等待进程结束
            local count=0
            while ps -p $pid > /dev/null 2>&1 && [ $count -lt 10 ]; do
                sleep 1
                count=$((count + 1))
            done
            
            # 如果进程仍在运行，强制终止
            if ps -p $pid > /dev/null 2>&1; then
                echo "⚡ 强制终止 $service_name..."
                kill -9 $pid
            fi
            
            echo "✅ $service_name 已停止"
        else
            echo "⚠️  $service_name 进程不存在 (PID: $pid)"
        fi
        
        rm -f "$pid_file"
    else
        echo "ℹ️  未找到 $service_name 的PID文件"
    fi
}

# 函数：停止端口上的进程
stop_port() {
    local port=$1
    local service_name=$2
    
    local pid=$(lsof -ti:$port 2>/dev/null)
    if [ ! -z "$pid" ]; then
        echo "🔄 停止端口 $port 上的 $service_name (PID: $pid)..."
        kill $pid
        sleep 2
        
        # 检查是否还在运行
        if lsof -ti:$port > /dev/null 2>&1; then
            echo "⚡ 强制终止端口 $port 上的进程..."
            kill -9 $(lsof -ti:$port)
        fi
        
        echo "✅ 端口 $port 已释放"
    else
        echo "ℹ️  端口 $port 未被占用"
    fi
}

# 主停止流程
main() {
    echo "🔍 检查staging环境状态..."
    
    # 停止后端服务
    echo "\n📡 停止后端服务..."
    stop_process ".staging_backend_pid" "后端API服务"
    stop_port "3001" "后端服务"
    
    # 停止前端服务
    echo "\n🖥️  停止管理系统前端..."
    stop_process ".staging_admin_pid" "管理系统前端"
    stop_port "5174" "前端服务"
    
    # 清理其他可能的Node.js进程
    echo "\n🧹 清理相关进程..."
    
    # 查找可能的staging相关进程
    local staging_pids=$(ps aux | grep -E "(staging|3001|5174)" | grep -v grep | grep node | awk '{print $2}')
    if [ ! -z "$staging_pids" ]; then
        echo "🔄 发现相关进程，正在清理..."
        echo "$staging_pids" | xargs kill 2>/dev/null
        sleep 2
        
        # 强制清理仍在运行的进程
        staging_pids=$(ps aux | grep -E "(staging|3001|5174)" | grep -v grep | grep node | awk '{print $2}')
        if [ ! -z "$staging_pids" ]; then
            echo "⚡ 强制清理残留进程..."
            echo "$staging_pids" | xargs kill -9 2>/dev/null
        fi
    fi
    
    # 清理临时文件
    echo "\n🗑️  清理临时文件..."
    rm -f .staging_backend_pid .staging_admin_pid
    
    # 清理环境配置文件
    if [ -f "backend/.env" ]; then
        rm -f "backend/.env"
        echo "✅ 清理后端环境配置"
    fi
    
    if [ -f "admin/.env.local" ]; then
        rm -f "admin/.env.local"
        echo "✅ 清理前端环境配置"
    fi
    
    echo "\n🎉 Staging环境已完全停止!"
    
    # 验证端口状态
    echo "\n🔍 验证端口状态:"
    if ! lsof -ti:3001 > /dev/null 2>&1; then
        echo "✅ 端口 3001 已释放"
    else
        echo "⚠️  端口 3001 仍被占用"
    fi
    
    if ! lsof -ti:5174 > /dev/null 2>&1; then
        echo "✅ 端口 5174 已释放"
    else
        echo "⚠️  端口 5174 仍被占用"
    fi
    
    echo "\n💡 重新启动staging环境: ./start-staging.sh"
}

# 执行主函数
main